home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 22 / Cream of the Crop 22.iso / program / eflibpt4.zip / DEMO / ADVANCED / DATATYPE.PAS < prev    next >
Pascal/Delphi Source File  |  1996-08-16  |  3KB  |  89 lines

  1. { Borland Pascal Extended Function Library - EFLIB (C) Johan Larsson, 1996
  2.   Demonstration; advanced teqniques with data types
  3.  
  4.   EFLIB IS PROTECTED BY THE COPYRIGHT LAW AND MAY NOT BE COPIED, SOLD OR
  5.   MANIPULATED. FOR MORE INFORMATION, SEE PROGRAM MANUAL! THIS DEMONSTRAT-
  6.   ION PROGRAM MAY FREELY BE USED AND DISTRIBUTED.                          }
  7.  
  8.  
  9. uses EFLIBDEF, EFLIBINI, EFLIBDAT;
  10.  
  11. type pMyElement = ^MyElement;
  12.      MyElement = object (LinkageObjectType)
  13.  
  14.        constructor Initialize (Number : real);
  15.        destructor Intercept; virtual;
  16.  
  17.        procedure Update (var Data; Size : word); virtual;
  18.        procedure Element (var Data); virtual;
  19.        procedure Dispose; virtual;
  20.  
  21.        procedure Display; virtual;
  22.  
  23.        function DataPointer (Position : word) : pointer; virtual;
  24.        function DataSize : word; virtual;
  25.        function IsAllocated : boolean; virtual;
  26.  
  27.      private
  28.  
  29.        NumberInElement : real;
  30.  
  31.      end;
  32.  
  33.      pMyList = ^MyList;
  34.      MyList = object (LinkedListObjectType)
  35.  
  36.        constructor Initialize;
  37.  
  38.        procedure Add (var Data); virtual;
  39.        procedure Insert (var Data; Index : word); virtual;
  40.  
  41.      end;
  42.  
  43. { *** MyElement *** }
  44.  
  45. constructor MyElement.Initialize; begin InitializeEmpty; NumberInElement := Number; end;
  46. destructor MyElement.Intercept; begin Dispose; Inherited Intercept; end;
  47. procedure MyElement.Update; begin NumberInElement := Real(Data); end;
  48. procedure MyElement.Element; begin Move (Data, NumberInElement, SizeOf(Real)); end;
  49. procedure MyElement.Dispose; begin end;
  50. procedure MyElement.Display; begin WriteLn (NumberInElement); end;
  51. function MyElement.DataPointer;
  52. begin DataPointer := Ptr (Seg(NumberInElement), Ofs(NumberInElement) + Pred(Position)); end;
  53. function MyElement.DataSize; begin DataSize := SizeOf(NumberInElement); end;
  54. function MyElement.IsAllocated; begin IsAllocated := Inherited IsAllocated; end;
  55.  
  56.  
  57. { *** MyList *** }
  58.  
  59. constructor MyList.Initialize;
  60. begin Inherited Initialize (SizeOf(MyElement)); end;
  61. procedure MyList.Add (var Data);
  62. begin AddNode(New(pMyElement, Initialize(Real(Data)))); end;
  63. procedure MyList.Insert (var Data; Index : word);
  64. begin InsertNode(New(pMyElement, Initialize(Real(Data))), IndexedNode(Index)); end;
  65.  
  66.  
  67. { Test program }
  68.  
  69. var Numbers : MyList; Number : real;
  70. begin
  71.      WriteLn ('* My data type *');
  72.  
  73.      with Numbers do begin
  74.           { Easy initialization when the element size is standardized }
  75.           Initialize;
  76.  
  77.           { Add some elements to the new data type }
  78.           Number := Pi;     Add (Number);
  79.           Number := 1.414;  Add (Number);
  80.           Number := 5;      Add (Number);
  81.  
  82.           { Check the result }
  83.           Number := 0; Element (1, Number);
  84.           WriteLn ('List contains ', Elements,
  85.                  ' elements. The first is ', Number:0:5, '.');
  86.  
  87.           Intercept; { Don't forget to intercept all the links! }
  88.      end;
  89. end.